package com.xiangge;

import java.util.Scanner;

/*
    逻辑运算符：
        分类： & , | , ^ , ! , && , ||
        明确： ! , && , || 必须掌握，其他了解
               逻辑运算符的操作数必须是boolean的值或者表达式
          
        & ： 逻辑与 
           明确： 二元运算符
           特点： 有false则false
           辅助记忆：小明和小红来一趟办公室  
           
        | ： 逻辑或
           明确： 二元运算符 
           特点： 有true则true
           辅助记忆： 小明或小红来一趟办公室
           
         ^ : 逻辑异或 
           明确： 二元运算符
           特点： 相同为false , 不同为true

      ------------------------------以上了解即可-------------------------------------------
      ------------------------------以下必须掌握-------------------------------------------
         ! : 逻辑非
            明确： 一元运算符
            特点： 取反 - !false  --> true , !true   --> false
            
         && : 短路与
            明确：运算特点和逻辑与一样, 但是多了短路效果
            短路效果 : 当左边表达式结果为false时,右边不执行,整个表达式的结果为左边的结果：false
                      当左边表达式结果为true时,右边执行,整个表达式的结果为右边运行的结果
           短路效果的好处： 提高程序的执行效率

           面试题： 请说说&& 和 & 的区别
              相同点： 运行的特点相同, 有false则false
              不同点： &&具有短路效果,执行效率高,单&没有短路效果

        || :短路或
              明确：运算特点和逻辑或一样, 但是多了短路效果
              短路效果 : 当左边表达式结果为true时,右边不执行,整个表达式的结果为左边的结果：true
                        当左边表达式结果为false时,右边执行,整个表达式的结果为右边运行的结果

          【随堂练习】
            1、判断一个数是否在4（包含）~6（不包含）之间；
            2、判断一个数是否在4（不包含）~6（包含）之外；

 */
public class OperatorDemo4 {
    public static void main(String[] args) {
        /*
           1、判断一个数是否在4（包含）~6（不包含）之间；
               分析：
                  1. 键盘录入一个整数： num
                  2. 判断 num是否在4（包含）~6（不包含）之间 ：
                       数学： 4 <= num < 6
                       java中：
                            条件一： 4 <= num
                            条件二： num < 6
                            条件一和二都必须满足： &&
                      条件： 4 <= num  && num < 6

                 判断： if的双选结构
                 if(判断条件){
                    当判断条件成立时,执行的代码
                 }
                 else{
                    当判断条件不成立时,执行的代码
                 }
         */
        // 1. 键盘录入一个整数： num
        System.out.println("请输入一个整数：");
        int num = new Scanner(System.in).nextInt();

        // 2. 使用if的双选结构判断 num是否在4（包含）~6（不包含）之间 ：
        if (num >= 4 && num < 6) { // 处理num在[4,6) 之间的情况
            System.out.println(num + "在[4,6) 之间");
        }
        else {// 处理num不在[4,6) 之间的情况
            System.out.println(num + "不在[4,6) 之间");
        }

    }
    public static void main3(String[] args) {
        int a = 10 , b = 20 , c = 30;
        System.out.println(a > b || a++ < c); // false || 执行 true
        System.out.println("a = " + a);
    }
    public static void main2(String[] args) {
        int a = 10 , b = 20 , c = 30;

        // System.out.println(a > b && a++ < c); // false && 不执行  --->false
         System.out.println(a > b & a++ < c); // true && 执行true

        System.out.println("a = " + a); // 10  --- a++ < c 没有执行


        /*System.out.println(a > b && a > c); // false && false  ---> false
        System.out.println(a > b && a < c); // false && true   ---> false
        System.out.println(a < b && a > c); // true && false   ---> false
        System.out.println(a < b && a < c); // true && true    ---> true*/
    }
    public static void main1(String[] args) {
        // System.out.println(7 & 3);

        int a = 10 , b = 20 , c = 30;

        System.out.println(!(a > b)); // !false  --> true
        System.out.println(!(a < b)); // !true   --> false
        System.out.println(!true);
        System.out.println(!false);
        System.out.println(!!!!!!!!!true);
/*
     ^ : 逻辑异或
 */
//        System.out.println(a > b ^ a > c); // false ^ false  ---> false
//        System.out.println(a > b ^ a < c); // false ^ true   ---> true
//        System.out.println(a < b ^ a > c); // true ^ false   ---> true
//        System.out.println(a < b ^ a < c); // true ^ true    ---> false
        
        /*
           | ： 逻辑或
         */
//        System.out.println(a > b | a > c); // false | false  ---> false
//        System.out.println(a > b | a < c); // false | true   ---> true
//        System.out.println(a < b | a > c); // true | false   ---> true
//        System.out.println(a < b | a < c); // true | true    ---> true
        
        /*
            & ： 逻辑与
         */
//        System.out.println(a > b & a > c); // false & false  ---> false
//        System.out.println(a > b & a < c); // false & true   ---> false
//        System.out.println(a < b & a > c); // true & false   ---> false
//        System.out.println(a < b & a < c); // true & true    ---> true
    }
}
